home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Graphics Plus
/
Graphics Plus.iso
/
formats
/
pcx
/
pcx2.doc
< prev
Wrap
Text File
|
1980-02-08
|
7KB
|
186 lines
Path: rice!cs.utexas.edu!uwm.edu!srcsip!jhereg!com50!pai!erc
From: erc@pai.UUCP (Eric Johnson)
Newsgroups: comp.graphics
Subject: Re: PCX's format
Date: 8 Jun 90 14:28:12 GMT
Organization: Boulware Technologies, Inc., Burnsville, MN
A long while back, I wrote a screen-dump utility that output a MONOCHROME
.PCX (PC-PaintBrush) file. Contact Z-Soft, the makers of PC-PaintBrush for
a full technical manual on the .PCX file format. In '86, I had some problems
with the manual (there seemed to be a few gaps), so enclosed below is part of
a Boulware Technologies (the firm I work for) Tech Note I wrote on the subject.
The note is old and if you find any errors, sorry. Z-Soft is, of course,
the primary source for information on this. I suggest you contact them.
Since much of the note deals with how I allowed the user to map any of
the 16 EGA colours to black or white dots (these screen dumps are for
use by the documentation staff), I deleted the parts that won't be
relevant for you.
(.PCX files do allow colour and typically use four colour planes. The data
is then output one plane at a time in the file. See the Z-Soft manual
for more info.)
-------
PAWS Tech Note 29
PC-Paintbrush Graphics Dumps
4 March 88 E F Johnson
A VERY technical tech note describing the new way of making PAWS
screen dumps into the standard-format .PCX files.
...
[...PAWs-related stuff deleted. I really don't think you want information
on our factory automation interface. If you do, send me email...]
...
3) To print out a .PCX file, use the PC-Paintbrush or Ventura Publisher
packages for the PC. No translation program is needed.
4) A .PCX file has the following format:
First, it has a 128-byte header, which looks like (in order in the file):
SIZE in BYTES DECSRIPTION DEFINITION
1 Manufacturer 10 == PC-Paintbrush PCX
1 Version 0 == 2.5
2 == 2.8 with palette info
3 == 2.8 without palette info
5 == 3.0 with palette info
1 Encoding 1 == .PCX run-length encoding
1 Bits per pixel we use 1 for mono images
8 WINDOW (MinX, MinY) (MaxX, MaxY)
2 Horizontal Res Horizontal Resolution
2 Vertical Res Vertical Resolution
48 ( 16 * 3 ) ColourMap R, G, B for each of 16 colours
The colour Map used is:
0, 0, 0
255, 255, 255
0, 170, 0
0, 170, 170
170, 0, 0
170, 0, 170
170, 170, 0
170, 170, 170
85, 85, 85
85, 85, 255
85, 255, 85
85, 255, 255
255, 85, 85
255, 85, 255
255, 255, 85
255, 255, 255
1 reserved (this puts in a 0)
1 Num Planes Number of colour planes, this uses 1
2 Bytes Per line 640 pixels/8 = 80 bytes per line
The rest of the 128-byte header is padded with zeroes.
NOTE: integer values (2 bytes) are in PC byte-order in the Big-endian/
Little-endian scheme. The PAWS code uses a union of:
union
{
char cpart[ 2 ];
int ipart;
} u;
to convert ints to two bytes in the header.
The data in the file comes after the header. The data section contains
a set of scan-lines, running by pixel from left-to-right, then top-to-bottom.
Each scan-line contains bytes with 8 pixels each (since this is monochrome,
each bit represents one pixel). PC-Paintbrush uses an encoding scheme
to conserve on file space. Basically, the scheme compares adjacent bytes
in one scan-line. If the adjacent bytes are the same, it the writes out
a flag ( 0xC0 ) with a count ( actually 0xC0 | count ). The next byte is
the data byte that is repeated. For example, if five bytes are the same
01 (in hex),
01 01 01 01 01
the .PCX output is only two bytes
C5 01
where C5 means special flag (C) with a count of 5, and the 01 in the
next position is the data byte.
If there is no match in the next byte, .PCX files just use the plain data
byte (implicit count of 1). For example, if the byte stream is
01 01 01 01 01 04 01 01
the .PCX output is
C5 01 04 C2 01
Note: this .PCX format breaks down in two cases:
i) If the byte value is >= 0xC0, (the flag code == top two bits are on),
then the format must use a C1 (flag with count 1)
ii) If there are more than 15 bytes the same, the count makes the 0xC0 become
0xD0 or higher. This confuses the decoding software in PC-Paintbrush.
Instead, only use counts UNDER 15. If there are 17 of the same bytes in
a row, use two count flags, e.g.,
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
becomes
CE 01 C3 01
More information on PC-Paintbrush file format can be found in the Z-Soft
Technical Reference Manual, 1986 version.
**
**
*/
/* -- defines for PC Paint Header */
#define PCPAINT 10 /* -- .PCX file */
#define PCXVERSION 5 /* -- PCPaint 3.0 w/ palette info */
#define ENCODING 1 /* -- .PCX encoding */
#define BITSPERPIXEL 1 /* -- Monochrome */
#define NUMPLANES 1 /* -- Monochrome */
#define WIND_X1 0 /* -- Window Coords */
#define WIND_Y1 0 /* -- Window Coords */
#define WIND_X2 639 /* -- Window Coords */
#define WIND_Y2 349 /* -- Window Coords */
#define HRES 640 /* -- Horizontal Resolution */
#define VRES 350 /* -- Vertical Resolution */
#define BYTESPERLINE 80 /* -- Bytes per scan line */
Hope this helps,
-Eric
--
Eric F. Johnson, Boulware Technologies, Inc.
415 W. Travelers Trail, Burnsville, MN 55337 USA. Phone: +1 612-894-0313.
erc@pai.mn.org - or - bungia!pai!erc
"Things are more like they are now than they've ever been," US President Ford.